package com.zhanjixun.weixin.service;

import com.zhanjixun.weixin.domain.*;

import java.awt.image.BufferedImage;
import java.io.File;
import java.util.List;
import java.util.Map;

/**
 * 网页微信HTTP接口
 * https://wx2.qq.com/zh_CN/htmledition/v2/sound/msg.mp3 微信消息提醒音频
 */
public interface WxService {
    /**
     * 上传媒体文件分片大小
     */
    int MEDIA_CHUNK_SIZE = 524288;

    /**
     * 获取UUID
     *
     * @return
     */
    String getUUID();

    /**
     * 获取登录二维码
     *
     * @param uuid
     * @return
     */
    BufferedImage getQRCodeImage(String uuid);

    /**
     * 检查登录二维码扫描情况
     *
     * @param uuid
     * @return
     */
    Map<String, String> getScanStatus(String uuid);

    /**
     * 获取服务器验证信息
     *
     * @return
     */
    WxTicket getWxTicket();

    /**
     * 初始化微信
     *
     * @return
     */
    WxInitDataDTO webWxInit();

    /**
     * 开启状态通知
     */
    void statusNotify();

    //void webWxLogout();

    /**
     * 获取通讯录
     *
     * @return 通讯录列表
     */
    List<ContactMember> getContact();

    /**
     * 检查是否有新消息
     *
     * @return
     */
    SyncCheck syncCheck();

    /**
     * 从服务器拉取新消息
     */
    WxSyncDTO webWxSync();

    /**
     * 发送消息
     *
     * @param toUserName 接收用户
     * @param content    发送内容
     * @param msgType    消息类型
     */
    WxMsg webWxSendMsg(String toUserName, String content, int msgType);

    /**
     * 撤回消息
     *
     * @param msgID      要撤回的消息
     * @param toUserName 接收用户
     */
    boolean webWxRevokeMsg(String msgID, String toUserName);

    /**
     * 上传媒体文件到服务器
     *
     * @param toUserName 接收用户
     * @param data       媒体文件数据
     * @param fileName   文件名称
     * @return
     */
    String webWxUploadMedia(String toUserName, byte[] data, String fileName);

    /**
     * 上传媒体文件到服务器
     *
     * @param toUserName 接收用户
     * @param mediaData  媒体文件
     * @return mediaId 媒体文件ID
     */
    String webWxUploadMedia(String toUserName, File mediaData);

    /**
     * 发送文件给好友
     *
     * @param toUserName 接收用户
     * @param fileName   文件名称
     * @param fileExt    文件长度
     * @param fileLen    文件后缀名
     * @param mediaId    上传文件后返回的MediaID
     * @return
     */
    WxMsg webWxSendAppMsg(String toUserName, String fileName, long fileLen, String fileExt, String mediaId);

    /**
     * 发送图片消息
     *
     * @param toUserName 接收用户
     * @param mediaId    上传文件后返回的MediaID
     * @return
     */
    WxMsg webWxSendMsgImg(String toUserName, String mediaId);

    /**
     * 发送视频给好友
     *
     * @param toUserName 接收用户
     * @param mediaId    上传文件后返回的MediaID
     * @return
     */
    WxMsg webWxSendVideoMsg(String toUserName, String mediaId);

    /**
     * 发送动画表情给好友(gif图片)
     *
     * @param mediaId
     * @return
     */
    WxMsg webWxSendEmoticon(String toUserName, String mediaId);

    /**
     * 下载消息中的图片文件
     *
     * @param msgId
     */
    File webWxGetMsgImg(String msgId);

    /**
     * 下载消息中的语音文件
     *
     * @param msgId
     */
    File webWxGetVoice(String msgId);

    /**
     * 下载消息中的文件
     *
     * @param fromUserName
     * @param mediaId
     */
    File webWxGetMedia(String fromUserName, String mediaId);

    /**
     * 按照http地址名推测是获取一些分享链接的图片
     * 目前在分享位置上看到使用pictype为location
     *
     * @param msgId
     */
    File webWxGetPublicLinkImg(String msgId);

    /**
     * 下载微信头像
     *
     * @return
     */
    File webWxGetIcon();
}
